<?php
// $Id: SoftLinkValue.class.php 73 2007-02-12 03:45:43Z tswicegood $
/**
 * This file contains {@link IntValue} which is part of the PHP Content 
 * Repository (phpCR), a derivative of the Java Content Repository JSR-170, and 
 * is licensed under the Apache License, Version 2.0.
 *
 * This file is based on the code created for
 * {@link http://www.jcp.org/en/jsr/detail?id=170 JSR-170}
 *
 * @author Travis Swicegood <travis@domain51.net>
 * @copyright PHP Code Copyright &copy; 2004-2005, Domain51, United States
 * @copyright Original Java and Documentation 
 *  Copyright &copy; 2002-2004, Day Management AG, Switerland
 * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, 
 *      Version 2.0
 * @package phpContentRepository
 */

/**
 * Load the {@link phpCR} library file(s)
 */ 
require_once(dirname(__FILE__) . '/phpCR.library.php');
phpCR::loadAbstract('BaseValue');
phpCR::loadClass('PropertyType');


/**
 * A {@link SoftLinkValue} provides an implementation
 * of the {@link Value} interface representing a soft link value
 * (i.e. an absolute or relative repository path).
 *
 * @author PHP - Travis Swicegood <travis@domain51.net>
 * @copyright Copyright &copy; 2004-2005, Domain51
 * @package phpContentRepository
 */
class SoftLinkValue extends BaseValue 
{
   /**
    * Defines the {@link PropertType} of this class.
    *
    * @var int
    * @see PropertyType::SOFTLINK
    */
    const TYPE = PropertyType::SOFTLINK;
    
    
   /**
    * Constructs a {@link SoftLinkValue} object representing an absolute
    * or relative path.
    *
    * @param path the link this {@link SoftLinkValue} should represent
    */
    public function __construct($path) 
    {
        assert('is_string($path)');
        
	    parent::__construct($path);
        
        $this->data = $path;
    }
    
    
   /**
    * Indicates whether some other object is "equal to" this one.
    *
    * The result is TRUE if and only if the argument is not
    * NULL and is a {@link SoftLinkValue} object that
    * represents the same value as this object.
    *
    * @param mixed
    * @return bool
    */
    public function equals($obj)
    {
        if ($this == $obj) {
            return true;
        }
        
        if ($obj instanceof SoftLinkValue && $this->data == $obj->getData()) {
            return true;
        }
        
        return false;
    }
    
    
    
   /**
    * @see Value::getDate()
    */
    public function getDate()
    {
        $this->setValueConsumed();
        
        phpCR::loadException('ValueFormat');
        throw new ValueFormatException("conversion to date failed: inconvertible types");
    }
    
    
   /**
    * @see Value::getLong()
    */
    public function getLong()
    {
        $this->setValueConsumed();
        
        phpCR::loadException('ValueFormat');
        throw new ValueFormatException("conversion to long failed: inconvertible types");
    }
    
    
   /**
    * @see Value::getBoolean()
    */
    public function getBoolean()
    {
        $this->setValueConsumed();
        
        phpCR::loadException('ValueFormat');
        throw new ValueFormatException("conversion to boolean failed: inconvertible types");
    }
    
    
   /**
    * @see Value::getDouble()
    */
    public function getDouble()
    {
        $this->setValueConsumed();
        
        phpCR::loadException('ValueFormat');
        throw new ValueFormatException("conversion to double failed: inconvertible types");
    }
    
    
   /**
    * @see Value::getString()
    */
    public function getString()
    {
        $this->setValueConsumed();
        
        if (!is_null($this->data)) {
            return $this->data;
        } else {
            phpCR::loadException('ValueFormat');
            throw new ValueFormatException("empty value");
        }
    }
}

